iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0

docker 的第二篇, 來介紹 dockerfile, 就是自己做 image, 然後 run 成 container, 所以 docker 是一種很流行的部屬方式.

做個最簡單的 http server

程式碼

專案架構

- main.go
- dockerfile
- ui
  - dist
  - src
  - package.json

先執行一下 go mod init web

接著加入以下檔案

main.go

package main

import (
	"fmt"
	"log"

	"github.com/gofiber/fiber/v2"
)

const (
	port      = ":3001"
	staticDir = "./ui/dist" // 因為目標靜態資料夾在 ui/dist 裡面, 這邊就只要注意這個路徑正確
)

func main() {
	app := fiber.New()

	app.Static("/", staticDir)

	fmt.Printf("Server is listening on port %s\n", port)

	err := app.Listen(port)
	if err != nil {
		log.Fatalf("Error starting server: %v\n", err)
	}
}

dockerfile

# 使用的 image, alpine是最小的linux系統, 這樣 image 就會很小省資源
FROM golang:1.21.1-alpine3.17

# 指定工作資料夾在 /app,  不然在/ 裡面會有很多其他檔案不太好管理
WORKDIR /app

# 把當前所有檔案複製到 /app 裡面
COPY . .

# 在 /app 裡面直接執行
CMD ["go","run","."]

web ui

  1. npm create vite ( 名字ui, react, javascript )
  2. yarn ( 安裝需要的依賴套件 )
  3. yarn run dev ( 先看一下畫面成功ok )
  4. yarn run build ( build成功會有一個 dist 資料夾 )

材料準備好了, 來開始製作 image

docker build -t goweb .

來跑成 container

docker run -it -p 3001:3001 --name goweb goweb

最後就可以檢查結果啦, 瀏覽 localhost:3001, 應該會看到網頁畫面

後記

上面的範例, 其實很多值得吐槽的地方, 太肥, 不必要的檔案, 很多東西需要優化, 但覺得現階段先這樣,能動, 優化的東西再加就好, multi-stage build 也之後再來介紹好了, 後面我們繼續介紹 docker-compose


上一篇
0x21 docker 指令篇
下一篇
0x23 db_1-helloworld
系列文
Go朱尼爾的學習雜記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言